package eleven2Twenty;

/**
 * 给定单项链表的头指针和一个结点指针，定义一个函数在O(1)时间删除该节点吗。
 * Created by Wongy on 2018/3/20.
 */
public class Thirteen13 {
    public static void main(String[] args) {
        ListNode listNode5 = new ListNode(5);
        ListNode listNode4 = new ListNode(4, listNode5);
        ListNode listNode3 = new ListNode(3, listNode4);
        ListNode listNode2 = new ListNode(2, listNode3);
        ListNode listNode1 = new ListNode(1, listNode2);
        solution(listNode1, listNode5);
        printListNode(listNode1);
    }

    private static void solution(ListNode startNode, ListNode deleteNode) {
        if (startNode == null || deleteNode == null) {
            return;
        }
        if (deleteNode.next != null) {
            deleteNode.value = deleteNode.next.value;
            deleteNode.next = deleteNode.next.next;
        } else if (deleteNode == startNode) {
            startNode = null;
        } else {
            ListNode listNode = startNode;
            while (listNode.next != deleteNode) {
                listNode = listNode.next;
            }
            listNode.next = null;
        }
    }

    private static void printListNode(ListNode listNode) {
        System.out.println(listNode.value);
        if (listNode.next != null) {
            printListNode(listNode.next);
        }
    }
}

class ListNode {
    int value;
    ListNode next;

    public ListNode(int value) {
        this.value = value;
    }

    public ListNode(int value, ListNode next) {
        this.value = value;
        this.next = next;
    }

}
